package com.powernode.service.message;

import com.powernode.constant.Constants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Date;

/**
 *  service模块 生产者 发送延时消息 到mq模块
 *  下订单后 , 需要支付 , 就将订单消息发送到延迟队列中 , 等待支付
 */
@Component
@Slf4j
public class DelayMessageService {

    @Resource
    private RabbitTemplate rabbitTemplate;

    /**
     * 发送延迟消息 到延迟队列当中
     * 使用延迟插件
     * @param orderId  : 订单id , 发送的消息
     */
    public void sendDelayMsg(Integer orderId) {
        log.info("下订单后--超时未支付功能--发送延迟消息功能");
        // 定义延迟时间
        MessageProperties messageProperties = new MessageProperties();
        messageProperties.setHeader("x-delay", Constants.DELAY_TIME);
        // 定义消息对象 --> 订单id  , 可以通过 订单id查询订单状态
        Message message = new Message(String.valueOf(orderId).getBytes(), messageProperties);
        // 发送消息
        rabbitTemplate.convertAndSend(Constants.EXCHANGE_DELAY_NAME, Constants.ROUTING_KEY_DELAY_NAME, message);
        log.info("延迟40s的消息发送成功 , 当前时间为 , {}" , new Date());
    }
}
